{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "eab505f3",
   "metadata": {},
   "source": [
    "Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n",
    "SPDX-License-Identifier: Apache-2.0\n",
    "\n",
    "# Learning Gremlin - Ordering, Functions, and Grouping\n",
    "\n",
    "This notebook is the third in a series of notebooks that walk through how to write queries using Gremlin.  \n",
    "\n",
    "In this notebook, we will examine the basics of how to perform ordering, grouping, and aggregation in Gremlin.  This notebook assumes that you have already completed the previous notebook \"01-Basic-Read-Queries\" so we will continue our lessons from the end of the previous notebook and assume that the data has been loaded into the cluster."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0c12469c",
   "metadata": {},
   "source": [
    "### Setting up the visualizations\n",
    "\n",
    "Run the next two cells to configure various display options for our notebook, which we will use later on to display our results in a pleasing visual way.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6e655017",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%graph_notebook_vis_options\n",
    "{\n",
    "  \"groups\": {    \n",
    "    \"person\": {\n",
    "      \"color\": \"#9ac7bf\"\n",
    "    },\n",
    "    \"review\": {\n",
    "      \"color\": \"#f8cecc\"\n",
    "    },\n",
    "    \"city\": {\n",
    "      \"color\": \"#d5e8d4\"\n",
    "    },\n",
    "    \"state\": {\n",
    "      \"color\": \"#dae8fc\"\n",
    "    },\n",
    "    \"review_rating\": {\n",
    "      \"color\": \"#e1d5e7\"\n",
    "    },\n",
    "    \"restaurant\": {\n",
    "      \"color\": \"#ffe6cc\"\n",
    "    },\n",
    "    \"cuisine\": {\n",
    "      \"color\": \"#fff2cc\"\n",
    "    }\n",
    "  }\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d5c80800",
   "metadata": {},
   "outputs": [],
   "source": [
    "node_labels = '{\"person\":\"first_name\",\"city\":\"name\",\"state\":\"name\",\"restaurant\":\"name\",\"cuisine\":\"name\"}'"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "111cfabb",
   "metadata": {},
   "source": [
    "We'll be using the `node_labels` variable to provide a nicer visualization when running the queries in this notebook. To use it, we need to pass it along with the query itself, as follows:\n",
    "\n",
    "`%%gremlin -d node_labels`\n",
    "\n",
    "The `-d` instructs the notebook as to which properties should be displayed for each specified node label."
   ]
  },
  {
   "attachments": {
    "dining-by-friends.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "48e9a85f",
   "metadata": {},
   "source": [
    "### Looking at our graph data\n",
    "\n",
    "As we examined the data model in the previous notebook, we are not going to examine it, however we will leave the data schema for reference.\n",
    "\n",
    "![dining-by-friends.png](attachment:dining-by-friends.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab986dac",
   "metadata": {},
   "source": [
    "\n",
    "## Ordering Results\n",
    "\n",
    "When working with data, one common requirement is to return that data in a consistent and ordered fashion.  \n",
    "\n",
    "By default, data returned from a Gremlin query does not have a specified order, and consistent order cannot be assumed across multiple executions of the same query. To give our data a consistent order we must use the combination of the `order()` and `by()` steps. These enable you to sort your results using the values that a query can return, such as nodes/edges, ID values, as well as via many expressions.  \n",
    "\n",
    "**Note** When the data being ordered contains a `null` value, these will be sorted to the end of the results for ascending sort order and the beginning of the list for descending sort order.\n",
    "\n",
    "\n",
    "### Ordering by a property\n",
    "\n",
    "The simplest ordering in Gremlin is to specify a single property.  This is accomplished using the `order().by(<property name>)` syntax. By default, items are ordered in ascending order and descending order can be specified using `order().by(<property name>, desc)`.  \n",
    "\n",
    "Let's first look at what our data looks like to find all the `restaurant` nodes in our graph and return the `name` property."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f7a0df81",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel('restaurant')\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91e99c64",
   "metadata": {},
   "source": [
    "As we see, there is no discernible order to the values returned.  \n",
    "\n",
    "Let's see how to order our data by executing the query below to find all the `restaurant` nodes in our graph and order them by the `name` property in descending order."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "deabe58e",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel('restaurant')\n",
    ".order()\n",
    ".by('name', desc)\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4eee92c8",
   "metadata": {},
   "source": [
    "As we see, with the addition of the `order().by()` steps we get our data returned in a nice organized manner.  \n",
    "\n",
    "### Ordering by multiple properties\n",
    "\n",
    "A common need when ordering data is to use multiple properties as the ordering criteria.  In Gremlin, this is achieved by adding multiple `by()` steps to the `order()` step. When multiple properties are specified, the results are first ordered by the first property, then for equal values, the next property, and so on for all the specified properties.  \n",
    "\n",
    "Let's see how this works by executing the query below to find all the `restaurant` nodes in our graph and order them by the `name` property, then by the `address` property."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "168bcc76",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel('restaurant')\n",
    ".order()\n",
    ".by('name',desc)\n",
    ".by('address',asc)\n",
    ".valueMap('name','address')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d36e1dd",
   "metadata": {},
   "source": [
    "You can also use internal properties such as `id` and `label` as the ordering criteria. In the examples below, we first show how to order by the object `id`, and then show how to order by the object `label`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "55f2aaf9",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel(\"restaurant\")\n",
    ".order().by(id)\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c63b78f6",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel(\"restaurant\",\"state\")\n",
    ".order().by(label, desc)\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55c2ef57",
   "metadata": {},
   "source": [
    "**Important**: Ordering a small set of data (<1M records) in Neptune should be performant. However, when ordering larger data sets (+1M records), it's likely to experience high latency. In this scenario, the recommendation is to query for the results, then use a caching layer such as [Redis Sorted Sets](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-use-cases.html#elasticache-for-redis-use-cases-gaming) to perform the ordering and return the data back to the client."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b78432a",
   "metadata": {},
   "source": [
    "### Pagination\n",
    "\n",
    "One of the most common requirements for applications is the ability to return the data in chunks, or pages in the response.  Gremlin supports pagination through the use of three steps: `range()`, and `skip()` and `limit()`.  \n",
    "\n",
    "We have already used the `limit()` step to specify the maximum number of entities returned. When used with the `skip()` step, which specifies the number of records to ignore at the beginning of the result set, we can create an effective pagination mechanism. One important thing to note about pagination is that we need to explicitly order the results to retrieve a consistent set of data in our pages. Without ordering the results, we have no guarantee that results will be returned in a constant order, meaning that the data shown for a specific \"page\" may differ between calls.\n",
    "\n",
    "Let's take a look at how we could use `skip()` and `limit()` to present a paginated view of the restaurants in our graph by retrieving the first page of results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0335cb50",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel(\"restaurant\")\n",
    ".order().by(\"name\")\n",
    ".skip(0)\n",
    ".limit(10)\n",
    ".values(\"name\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70d12ad6",
   "metadata": {},
   "source": [
    "Let's see what it looks like to retrieve the second page of data. To accomplish this, we need to set the value in the `skip()` step to represent the page size we would like to skip."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7371ac06",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel(\"restaurant\")\n",
    ".order().by(\"name\")\n",
    ".skip(10)\n",
    ".limit(10)\n",
    ".values(\"name\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "978fff4c",
   "metadata": {},
   "source": [
    "As we see, the data we retrieve from the second query represents the second page of results returned from our query.  Please don't hesitate to try additional values for the `skip()` and `limit()` values to see how the query reacts.\n",
    "\n",
    "Let's now take a look at how we can use the `range()` step to perform pagination in Gremlin."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6cd418c3",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel(\"restaurant\")\n",
    ".order().by(\"name\")\n",
    ".range(0,10)\n",
    ".values(\"name\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48c15eac",
   "metadata": {},
   "source": [
    "Let's see what it looks like to retrieve the second page of data. To accomplish this, we need to set the value in the `range()` step to represent the page size we would like to return."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b34b445a",
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel(\"restaurant\")\n",
    ".order().by(\"name\")\n",
    ".range(10,20)\n",
    ".values(\"name\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0c9db04",
   "metadata": {},
   "source": [
    "When should you use one approach over the other? In some cases, both `limit()` and `skip()` are shorthand alternatives to `range()`. For example, to retrieve all restaurants from the 10th record to the end of the list, we can use the following approaches:\n",
    "\n",
    "`g.V().hasLabel(\"restaurant\").skip(5)`\n",
    "\n",
    "or\n",
    "\n",
    "`g.V().hasLabel(\"restaurant\").range(5,-1)`\n",
    "\n",
    "**Important**. When using pagination it's important to understand that even though you're returning a range of records, the query must still retrieve all records and then filter out records outside of the range you're asking for. Therefore, pagination does not improve query performance. Instead, you should use the [Gremlin query results cache](https://docs.aws.amazon.com/neptune/latest/userguide/gremlin-results-cache.html).\n",
    "\n",
    "The results of both queries are the same, as is the amount of time to execute each query.\n",
    "\n",
    "Now that we have looked at the ordering and pagination in Gremlin, it's time to take a look at another major set of functionality in formatting Gremlin results, grouping."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "952c7825",
   "metadata": {},
   "source": [
    "## Grouping Results\n",
    "\n",
    "Grouping results in Gremlin is done by explicitly calling the `group()` or `groupCount()` steps, similar to the `GROUP BY` clause used in SQL. In Gremlin, grouping is also controlled by the use of aggregating expressions containing one or more aggregating functions (`mean()`, `count()`, `max()`, `min()`, `sum()`).\n",
    "\n",
    "Groups are determined by the use of the `by` modulator step that proceeds either a `group()` or `groupCount()` step. Let's look at an example to understand how this works.\n",
    "\n",
    "**Example**\n",
    "\n",
    "|id|first_name|\n",
    "|---|---|\n",
    "|1|Dave|\n",
    "|2|Josh|\n",
    "|3|Kelly|\n",
    "|4|Dave|\n",
    "\n",
    "```\n",
    "g.V()\n",
    ".groupCount()\n",
    ".by('first_name')\n",
    ".unfold()\n",
    "```\n",
    "Results:\n",
    "\n",
    "|result|\n",
    "|---|\n",
    "|{'Dave': 2}|\n",
    "|{'Josh': 1}|\n",
    "|{'Kelly': 1}|\n",
    "\n",
    "In this example, we're counting the number of each occurrence of the `first_name` property value, and then returning it alongside the `first_name` value itself. Similarly, we could use the `group()` step instead, and combine it with the `count()` aggregation function in a second `by` modulation to do the same thing:\n",
    "\n",
    "```\n",
    "g.V()\n",
    ".group()\n",
    ".by('first_name')\n",
    ".by(count())\n",
    ".unfold()\n",
    "```\n",
    "Results:\n",
    "\n",
    "|result|\n",
    "|---|\n",
    "|{'Dave': 2}|\n",
    "|{'Josh': 1}|\n",
    "|{'Kelly': 1}|"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57de99aa",
   "metadata": {},
   "source": [
    "Before we start on grouping, let's learn about `fold()` and `unfold()` steps, as no doubt the keen eyed amongst you will have noticed that we've been using the `unfold()` step in some of the previous examples.\n",
    "\n",
    "### Fold and Unfold\n",
    "\n",
    "The `fold()` step converts individual rows into a list in a single row. The following query is an example of returning all restaurants as a list, rather than individual records."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dcd6555c",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V().hasLabel('restaurant')\n",
    ".values('name')\n",
    ".fold()\n",
    "\n",
    "// Results in:\n",
    "// [\"Perryman's\", 'Spicy Heat', 'Rare Choice', 'Super Delish', 'Eastern Winds', 'Saucy-Cheesy-Saucers', 'With Pasta', 'With Brine', 'With Wine', 'U-S-A', 'Pick & Go', 'Rare Bull', 'Satiated', 'Good Bull', 'Southern Fire', 'With Salsa', 'With Curry', 'With Shell', 'Taters', 'Awesome Sauce', 'Prancing Pony', 'Mexican Hut', 'Rabbitfood', 'Hand Roll', 'Northern Quench', 'Western Granola', 'With Noodles', 'With Sauce', 'Without Chaser', 'With Rice', 'Food For Thought', \"Dave's Big Deluxe\", 'Quick N Greasy', 'Lonely Grape', 'Breaded & Fried', 'All Night Long', 'Black Pit of Des Pair', 'Without Heat', 'With Ginger', 'Fat Fried Fast']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "507d044c",
   "metadata": {},
   "source": [
    "The `unfold()` step does the opposite, converting a single row of list values into individual rows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9db81493",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V().hasLabel('restaurant')\n",
    ".values('name')\n",
    ".fold()\n",
    ".unfold()\n",
    "\n",
    "// Results in:\n",
    "//1   Perryman's\n",
    "//2   Spicy Heat\n",
    "//3   Rare Choice\n",
    "//4   Super Delish\n",
    "//5   Eastern Winds\n",
    "//6   Saucy-Cheesy-Saucers\n",
    "//7   With Pasta\n",
    "//8   With Brine\n",
    "//9   With Wine\n",
    "//10  U-S-A"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "821a71e4",
   "metadata": {},
   "source": [
    "### Group by a property\n",
    "\n",
    " the query below, returns all the `person` nodes along with the number of nodes with the matching `first_name` property, and ordered by the `first_name` property in **ascending** order."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f66d367b",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin -d $node_labels\n",
    "g.V().hasLabel('person')\n",
    ".groupCount()\n",
    ".by('first_name')\n",
    ".order()\n",
    ".by('first_name')\n",
    ".unfold()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c92cf2e",
   "metadata": {},
   "source": [
    "### Group on a pattern match\n",
    " \n",
    "Another common need is to use multiple different elements in a pattern to perform a grouping/aggregation query. To accomplish this, we combine what we know about filtering with what we have just learned about grouping to achieve this aggregation.\n",
    "\n",
    "Let's take a look at what it would look like to find the average rating of the restaurants in our graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f646e881",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V().hasLabel('restaurant')\n",
    ".group()\n",
    ".by('name')\n",
    ".by(in('about').values('rating').mean())\n",
    ".unfold()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60b2eab1",
   "metadata": {},
   "source": [
    "## Combining Queries\n",
    "\n",
    "Now that we have learned about all the major features (finding, filtering, formatting, ordering, functions, and grouping) of Gremlin, we have one more topic to discuss in this notebook, how to combine traversals together to create more complex traversals. In Gremlin, we can achieve this by using the `union()` step.\n",
    "\n",
    "The `union()` step combines the results of 2 or more traversals together and returns the combined result from both traversals.\n",
    "\n",
    "Let's see what an example `union` step looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "190af502",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel('restaurant')\n",
    ".union(\n",
    "    has('name','With Pasta'),\n",
    "    has('name','With Wine')\n",
    ")\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89545b7b",
   "metadata": {},
   "source": [
    "We can also combine objects from previous traversals into a `union` step using aliases."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6328a541",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel('restaurant').has('name','With Pasta').as('a')\n",
    ".union(\n",
    "    select('a'),\n",
    "    __.V().hasLabel('restaurant').has('name','With Wine')\n",
    ")\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e31b0932",
   "metadata": {},
   "source": [
    "An important point to note is that `union` works in the same way as other Gremlin steps in that it uses the *incoming traversal* as its starting point. \n",
    "\n",
    "The following query traverses to the `With Pasta` restaurant and then uses a `union` step to combine the results with a traversal to the `With Wine` restaurants. Let's take a look at the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9b049f90",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n",
    "g.V()\n",
    ".hasLabel('restaurant').has('name','With Pasta').as('a')\n",
    ".union(\n",
    "    select('a'),\n",
    "    hasLabel('restaurant').has('name','With Wine')\n",
    ")\n",
    ".values('name')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0c9a4e2",
   "metadata": {},
   "source": [
    "Only one result was returned! This is because the second traversal in the `union` step *starts* from the **With Pasta** restaurant, and looks for a `restaurant` node with a `name` property value of **With Wine**. To resolve this, we need to use the `__` **anonymous traversal** technique to search the entire graph, irrespective of the previous traversal."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d29116ed",
   "metadata": {},
   "source": [
    "## Optimizing Query Performance using Caching\n",
    "\n",
    "**Note:** Whilst not specific to wholly Gremlin, this section is useful to understand the different approaches to optimizing your query performance within Neptune.\n",
    "\n",
    "Amazon Neptune is a fully managed, memory-optimized graph database. As a result, it will try to store as much of your graph in the local memory of the instance that is executing the query in `Buffer Cache` - a specific local instance cache type - for fast query performance. When the required data is not in the buffer cache, Neptune must retrieve it from shared storage before adding it to the buffer cache, which adds to the latency of your queries.\n",
    "\n",
    "There are several caching mechanisms supported by Neptune:\n",
    "\n",
    "* `Buffer Cache` - This is an always-on caching technique, whereby Neptune allocates two-thirds of the memory of your instance for storing requested data. It works on a `FIFO` (First-In-First-Out) basis, meaning older cached data pages are removed first. The ratio of buffer 'hits' (queries that retrieve data from memory rather than shared storage) should always be >= 99.9%. You can monitor this using the [`BufferCacheHitRatio` CloudWatch metric](https://docs.aws.amazon.com/neptune/latest/userguide/cw-metrics.html).\n",
    "\n",
    "* `Results Cache` - (Gremlin only) This provides a mechanism to cache the results from a specific query on a per-instance basis. It is [disabled by default](https://docs.aws.amazon.com/neptune/latest/userguide/gremlin-results-cache.html#gremlin-results-cache-enabling), and works on an `LRU` (Least Recently Used) basis, meaning older cached keys are removed first. See [Paginated cached query results](https://docs.aws.amazon.com/neptune/latest/userguide/gremlin-results-cache.html#gremlin-results-cache-paginating) for an example of combining results cache with the `range()` step. Note, this cannot be enabled on T instance types.\n",
    "\n",
    "* `Lookup Cache` - This is an always-on caching technique, but is **only available for D instances, e.g. R5d, and not Serverless**. It uses local instance SSD storage to store property values (strings) or RDF literals for fast retrieval. This can be useful when frequently returning or filtering on a large number of property values.\n",
    "\n",
    "As a general rule, you should look to optimize your queries by only filtering on, and returning properties that you need. \n",
    "\n",
    "In addition, monitoring your cluster and instance health using [CloudWatch metrics](https://docs.aws.amazon.com/neptune/latest/userguide/cw-metrics.html) can alert you to causes for query performance degradation.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5d352e5",
   "metadata": {},
   "source": [
    "## Exercises\n",
    "\n",
    "Now that we have gone through the main concepts of Gremlin read queries, it's time to put it into practice.  Below are several exercises you can complete to verify your understanding of the material covered in this notebook.  As practice for what you have learned, please write the Gremlin queries specified below.\n",
    "\n",
    "For these exercises, we will be leveraging the majority of the different entities in our data to show how we would build a common graph pattern known as \"collaborative filtering\" which is often used to provide recommendations to users based on other's reviews.  Collaborative filtering works on the idea that if two people share the same opinion on a topic, such as a restaurant, then they are more likely to share similar opinions on other topics.  With a graph we can leverage these connections to help provide recommendations based on these patterns of connections.  In these exercises, we will be recommending restaurants to our users based upon reviews.\n",
    "\n",
    "\n",
    "### Exercise 1: What are the 3 highest rated restaurants?\n",
    "\n",
    "Using the data model above, write a query that will:\n",
    "\n",
    "* Find the 3 highest average restaurant rating\n",
    "* Find the associated `cuisine`\n",
    "* Return the restaurant name, the cuisine name, and the average rating\n",
    "* Order the results by average rating descending\n",
    "\n",
    "The results for this query are:\n",
    "\n",
    "|Restaurant name|Cuisine|Avg Rating|\n",
    "|---|---|---|\n",
    "|Lonely Grape|bar|5.0|\n",
    "|Perryman's|bar|4.5|\n",
    "|Rare Bull|steakhouse|4.333333|\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "36adacaf",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04ab5b59",
   "metadata": {},
   "source": [
    "### Exercise 2: Find the top 3 highest rated restaurants in the city where Dave lives\n",
    "\n",
    "Using the data model above, write a query that will:\n",
    "\n",
    "* Find a `person` node(s) with a `first_name` of \"Dave\"\n",
    "* Find the `city` that Dave lives in\n",
    "* Find the average rating of restaurants in that city\n",
    "* Find the top 3 average ratings\n",
    "* Return the restaurant name, address, and average rating\n",
    "* Order by the average rating descending\n",
    "\n",
    "The results for this query are:\n",
    "\n",
    "|Restaurant name|Address|Avg Rating|\n",
    "|---|---|---|\n",
    "|Dave's Big Deluxe|\t490 Ivan Cape|4.0|\n",
    "|Pick & Go|4881 Upton Falls|3.75|\n",
    "|Without Chaser|\t01511 Casper Fall|3.5|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dae9d211",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "678a243d",
   "metadata": {},
   "source": [
    "### Exercise 3: Which Mexican or Chinese restaurant near Dave is the highest rated?\n",
    "\n",
    "Using the data model above, write a query that will:\n",
    "\n",
    "* Find a `person` node(s) with a `first_name` of \"Dave\"\n",
    "* Find the `city` that Dave lives in\n",
    "* Find the restaurants in that city that serve 'Mexican' or 'Chinese' food\n",
    "* Find the average rating of those restaurants\n",
    "* Return the restaurant name, address, and average rating\n",
    "* Order by the average rating descending\n",
    "* Return the top 1 result\n",
    "\n",
    "The results for this query are:\n",
    "\n",
    "|Restaurant name|Address|Avg Rating|\n",
    "|---|---|---|\n",
    "|With Salsa|24320 Williamson Causeway|3.5|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f96b91e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e93f266d",
   "metadata": {},
   "source": [
    "### Exercise 4: What are the top 3 restaurants, recommended by his friends, where Dave lives? (Personalized Recommendation)\n",
    "\n",
    "Using the data model above, write a query that will:\n",
    "\n",
    "* Find a `person` node(s) with a `first_name` of \"Dave\"\n",
    "* Find the `city` that Dave lives in\n",
    "* Find Dave's friends\n",
    "* Find reviews written by Dave's friends in the city \"Dave\" lives in\n",
    "* Find the average rating of those restaurants\n",
    "* Return the restaurant name, address, and average rating\n",
    "* Order by the average rating descending\n",
    "* Return the top 3\n",
    "\n",
    "The results for this query are:\n",
    "\n",
    "|Restaurant name|Address|Avg Rating|\n",
    "|---|---|---|\n",
    "|Dave's Big Deluxe|490 Ivan Cape|4.0|\n",
    "|With Salsa|24320 Williamson Causeway|4.0|\n",
    "|Satiated|370 Hills Estates|3.666667|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81e5d4bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "%%gremlin"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5acefc5",
   "metadata": {},
   "source": [
    "## Conclusion\n",
    "\n",
    "In this notebook, we explored ordering, functions, and grouping in Gremlin queries. These queries are a powerful and common way to format and mutate data within your graph.  This is also the last notebook in the set dedicated to writing read queries.  In the next notebook we will take a look at how to write queries that mutate data through insert, update, and delete operations."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
